#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//1.主调函数分配内存,被调用函数使用内存 指针的输入特性
void printString(const char* str)
{
    printf("打印内容: %s\n", str);
}
void printStringArray(char** arr, int len)
{
    //arr[0] 是char* 类型的
    for (size_t i = 0; i < len; ++i){
        printf("%s\n", arr[i]);
    }
}
void printIntArray(int* arr, int len)
{

}
void test01()
{
    //堆上分配内存
    char* s = malloc(sizeof(char)*100);
    memset(s,0,100);
    strcpy(s,"I am Polly!");
    printString(s);

    //数组名做函数参数就会退化为指向数组首元素的指针
    int arr[] = {1, 2, 3, 4, 5};

    //栈上分配
    char* strs[] = {
        "aaaaa",
        "bbbbb",
        "ccccc",
        "ddddd",
        "eeeee"
    };

    int len = sizeof(strs)/sizeof(strs[0]);

    printStringArray(strs, len);
}

//2.输出特性 被调函数分配内存, 主调函数使用内存
void allocateSpace(char** temp)
{
    char* p = malloc(100);
    memset(p, 0, 100);
    strcpy(p, "hello world!");

    //指针的间接赋值
    *temp = p;
}
void test02()
{
    char* p = NULL;
    allocateSpace(&p);
    printf("p = %s\n",p);

    if(NULL != p){
        free(p);
        p = NULL;
    }
}
int main()
{
    //test01();
    test02();
    return 0;
}